this code is not supposed to be read.. so dont blame me if everything in this code is messy and hard to understand :)